//package com.justgame.project.task;
//
//import com.justgame.project.cloud.common.constant.Const;
//import com.justgame.project.cloud.common.util.RedisUtil;
//import com.justgame.project.service.api.dto.JustGamePlatformDTO;
//import com.justgame.project.service.api.dto.SysHomeColumnDTO;
//import com.justgame.project.cloud.common.entity.PageRequest;
//import com.justgame.project.service.api.entity.SysPlatformInfo;
//import com.justgame.project.service.api.entity.SysStatusInfo;
//import com.justgame.project.module.mapper.ShiroMapper;
//import com.justgame.project.service.system.mapper.SysHomeColumnMapper;
//import com.justgame.project.service.just.service.JustGamePlatformService;
//import com.justgame.project.module.service.sys.SysPlatformInfoService;
//import com.justgame.project.module.service.sys.SysStatusInfoService;
//import com.justgame.project.module.service.sys.SysUserInfoService;
//import com.justgame.project.service.api.vo.JustGamePlatformVO;
//import com.justgame.project.service.api.vo.SysHomeColumnVO;
//import com.justgame.project.service.api.vo.SysRoleInfoVO;
//import lombok.Data;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//import java.util.*;
//
//@Data
//@Component
//public class SpringInit {
//    private Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    @Resource
//    private RedisUtil redisUtil;
//
//    @Resource
//    private SysUserInfoService sysUserInfoService;
//
//    @Resource
//    private SysStatusInfoService sysStatusInfoService;
//
//    @Resource
//    private SysPlatformInfoService sysPlatformInfoService;
//
//    @Resource
//    private SysHomeColumnMapper sysHomeColumnMapper;
//
//    @Resource
//    private ShiroMapper shiroMapper;
//
//    @Resource
//    private JustGamePlatformService justGamePlatformService;
//
//    @Value("${spring.redis.database:0}")
//    private String db;
//
//    @Value("${JustGame.Token.AutoClear:false}")
//    private boolean AutoClear;
//
//    /**
//     * 初始化账户最基本信息（id+账号）
//     */
//    @PostConstruct
//    public void initAllAccountId() {
//        /**
//         * 已改为登录时获取并存储，退出登录后清理
//         */
//        //try {
//        //    List<SysUserInfo> list = sysUserInfoService.getAllAccountId();
//        //    logger.info("正在删除Redis缓存...（Key:{})", Const.KEY_REDIS_TOTAL_USER);
//        //    redisUtil.delete(Const.KEY_REDIS_TOTAL_USER);
//        //    logger.info("正在生成Redis缓存...（Key:{})", Const.KEY_REDIS_TOTAL_USER);
//        //    list.stream().parallel().forEach(user -> {
//        //        Map<Object, Object> map = new HashMap<>();
//        //        map.put(user.getId(), user);
//        //        redisUtil.hSet(Const.KEY_REDIS_TOTAL_USER, map);
//        //    });
//        //    logger.info("已在Redis Database number:{} 中缓存全部用户id，总计{}条数据。 (Key:{})", db, list.size(), Const.KEY_REDIS_TOTAL_USER);
//        //} catch (Exception e) {
//        //    logger.error("Redis初始化缓存失败 initAllAccountId");
//        //}
//    }
//
//    @PostConstruct
//    public void initAccountStatus() {
//        try {
//            String initKey = Const.KEY_REDIS_TOTAL_STATUS;
//            List<SysStatusInfo> list = sysStatusInfoService.all();
//            logger.info("正在删除Redis缓存...（Key:{})", initKey);
//            redisUtil.delete(initKey);
//            logger.info("删除Redis缓存完成！ （Key:{})", initKey);
//            redisUtil.lRightPush(initKey, list, 99999999);
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 initAccountStatus");
//        }
//    }
//
//    @PostConstruct
//    public void CachePlatformInfo() {
//        try {
//            List<SysPlatformInfo> platformInfos = sysPlatformInfoService.getAll();
//            String initKey = Const.KEY_REDIS_PLATFORM_INFO;
//            logger.info("正在删除Redis缓存...（Key:{})", initKey);
//            redisUtil.delete(initKey);
//            logger.info("删除Redis缓存完成！ （Key:{})", initKey);
//            redisUtil.lRightPush(initKey, platformInfos, 99999999);
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 CachePlatformInfo");
//        }
//    }
//
//    @PostConstruct
//    public void CacheGamePlatformInfo() {
//        try {
//            List<JustGamePlatformVO> platformInfos = justGamePlatformService.getList(new PageRequest(), new JustGamePlatformDTO()).getRows();
//            String initKey = Const.KEY_REDIS_GAME_PLATFORM;
//            logger.info("正在删除Redis缓存...（Key:{})", initKey);
//            redisUtil.delete(initKey);
//            logger.info("删除Redis缓存完成！ （Key:{})", initKey);
//            redisUtil.lRightPush(initKey, platformInfos, 99999999);
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 CachePlatformInfo");
//        }
//    }
//
//
//    @PostConstruct
//    public void ClearTimeoutToken() {
//        if (!AutoClear) {
//            return;
//        }
//
//        try {
//            logger.info("正在清空Token");
//            int count = redisUtil.delKeys(Const.KEY_REDIS_TOKEN_HEAD + "*");
//            count += redisUtil.delKeys(Const.KEY_REDIS_TOKEN_CURRENT + '*');
//            logger.info("已清空Token，共计：{}条数据。", count);
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 ClearTimeoutToken");
//        }
//    }
//
//    /**
//     * 缓存首页板块信息
//     */
//    @PostConstruct
//    public void initHomeColumns() {
//        try {
//            logger.info("正在缓存首页数据~！~！~！~！~！~！~！~！~！");
//            redisUtil.delete(Const.KEY_HOME_COLUMNS);
//            SysHomeColumnDTO dto = new SysHomeColumnDTO();
//            dto.setIsHidden(0);
//            List<SysHomeColumnVO> columnVos = sysHomeColumnMapper.Select(dto);
//            Long size = redisUtil.lRightPush(Const.KEY_HOME_COLUMNS, columnVos, RedisUtil.NOT_EXPIRE);
//            logger.info("首页数据缓存完毕，共{}项~！~！~！~！~！~！~！~！~！", size);
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 initHomeColumns");
//        }
//    }
//
//    /**
//     * 缓存账号权限
//     */
//    @PostConstruct
//    public void initUserRoles() {
//        try {
//            logger.info("init user roles ~！~！~！~！~！~！~！~！~！");
//            redisUtil.delKeys(Const.KEY_USER_ROLES + "*");
//            List<SysRoleInfoVO> roleInfos = shiroMapper.selectAllUserRoles();
//            Map<Object, Object> maps = new HashMap<>();
//            roleInfos.stream().parallel().forEach(data -> {
//                String userId = data.getUserId();
//                Set<String> role = (Set<String>) maps.get(userId);
//                if (role == null) {
//                    role = new HashSet<>();
//                }
//                role.add(data.getRole());
//                Map<Object, Object> map = new HashMap<>();
//                map.put(userId, role);
//                maps.putAll(map);
//                redisUtil.hSet(Const.KEY_USER_ROLES, map);
//            });
//            redisUtil.hSet(Const.KEY_USER_ROLES, maps, 99999999);
//            logger.info("init user roles ~！~！~！~！~！~！~！~！~！");
//        } catch (Exception e) {
//            logger.error("Redis初始化缓存失败 initUserRoles");
//        }
//    }
//}
